#include <signal.h>
#include <stdio.h>
#include <cstring>
#include <unistd.h>
#include <iostream>

using namespace std;
void printblock()
{
    sigset_t set, ost;
    sigprocmask(SIG_BLOCK, nullptr, &ost);
    printf("block: ");

    for (int i = 31; i >= 1; i--)
    {
        if (sigismember(&ost, i))
        {
            printf("1");
        }
        else
        {
            printf("0");
        }
    }
    printf("\n");
}

void printpend()
{
    sigset_t set;
    sigpending(&set);
    printf("pend: ");
    for (int i = 31; i >= 1; i--)
    {
        if (sigismember(&set, i))
        {
            printf("1");
        }
        else
        {
            printf("0");
        }
    }
    printf("\n");
}
int flag = 0;
void handler(int signo)
{
    // printpend();  //打印pend
    // //printblock(); //打印block
    // int n = 5;
    // printf("catch a signo:%d\n", signo);
    // while (n > 0){
    
    //  printpend();  //打印pend

    //     sleep(1);
    //     n--;
    // }
    printf("catch a signo:%d\n", signo);
    flag = 1;
}


int main()
{
    // struct sigaction act;
    // memset(&act, 0, sizeof(act));
    // act.sa_handler = handler;
    // sigemptyset(&act.sa_mask);
    // sigaddset(&act.sa_mask, 4);
    // sigaddset(&act.sa_mask, 5);

    // sigaction(2, &act, nullptr);

    // while (true)
    // {
    //     printf("%d\n", getpid());
    //     //printblock();
    //     sleep(1);
    // }


    signal(2, handler);
    //flag可能会优化到寄存器变量
    while (!flag);

    printf("process quit\n");
    return 0;
}